import os
from datetime import datetime
import time


def rename_files_in_folder(folder_path):
    """
    重命名文件夹内所有文件，文件名为: 年月日时分秒毫秒（如 20250405123045123）
    保证时间戳唯一，绝不使用 _1, _2 等后缀

    参数:
        folder_path (str): 目标文件夹路径
    """
    # 检查文件夹是否存在
    if not os.path.isdir(folder_path):
        print(f"错误: 文件夹 {folder_path} 不存在")
        return

    # 获取所有文件
    files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]

    if not files:
        print("提示: 文件夹中没有文件需要重命名。")
        return

    renamed_count = 0
    last_timestamp_ms = 0  # 记录上一个使用的时间戳（毫秒级）

    for filename in files:
        old_path = os.path.join(folder_path, filename)
        file_ext = os.path.splitext(filename)[1]  # 保留原扩展名

        while True:
            now = datetime.now()
            # 生成 17 位时间戳: YYYYMMDDHHMMSSmmm
            timestamp_ms = int(now.strftime("%Y%m%d%H%M%S") + f"{now.microsecond // 1000:03d}")

            # 确保时间戳严格递增（防止重复）
            if timestamp_ms > last_timestamp_ms:
                last_timestamp_ms = timestamp_ms
                break
            else:
                # 等待直到时间戳变化（最多等待 1ms 多一点）
                time.sleep(0.0011)  # 睡眠 1.1 毫秒，确保进入下一毫秒
                continue

        # 构建新文件名（纯时间戳，无前缀，无序号）
        new_filename = f"{timestamp_ms}{file_ext}"
        new_path = os.path.join(folder_path, new_filename)

        # 检查目标文件是否已存在（理论上不会，但保险）
        if os.path.exists(new_path):
            print(f"重命名失败（文件已存在）: {new_filename}")
            continue

        # 重命名
        try:
            os.rename(old_path, new_path)
            renamed_count += 1
            print(f"重命名: {filename} -> {new_filename}")
        except Exception as e:
            print(f"重命名 {filename} 失败: {str(e)}")

    print(f"\n✅ 完成！共重命名了 {renamed_count} 个文件，所有文件名均为唯一时间戳，无重复、无序号。")


# =============== 使用示例 ===============
target_folder = r"D:\360极速浏览器X下载"
rename_files_in_folder(target_folder)